/**
 * 被观察者,作用是通知观察者更新视图,核心就是调用 vm._update(vm._render());
 */
let id = 0;
class Dep {
  constructor() {
    this.id = id++;//一个属性dep可能对应多个视图,就是一个为属性在多个组件上使用
    this.subs = []; //这里存放的是watxh
  }

  // 把watch,加入dep收集中
  depend() {
    //处理重复watch
    Dep.target.addDep(this); //Dep.target是watcher
  }
  addSub(watcher) {
    this.subs.push(watcher);
  }
  notify() {
    this.subs.forEach(watcher => watcher.update())
  }
}
Dep.target = null;

// /把watch加入队列
let start = [];
export function pushTarget(watcher) {
  start.push(watcher)
  Dep.target = watcher
}
export function popTarget() {
  start.pop();
  Dep.target = start[start.length - 1];
}

export default Dep;
